與捕捉語義相似性的稠密性不同,稀疏嵌入(Sparse Embedding)根植於傳統訊息檢索,核心是精確的關鍵詞匹配。它將文檔表示為極高維度的向量,絕大多數維度為0,只有與文檔中出現的詞彙對應的維度具有非零值。
理論基石是經典的詞袋模型(Bag of Words, BoW)--它把一段文本看作一個"裝滿詞的帶子",只關心那些詞出現了、出現次數、完全忽略詞順序。例如:"貓追狗"和"狗追貓"在詞袋模型中是完全相同的。在此基礎上,又逐步發展出更複雜的詞項加權與排序算法。
從TF-IDF到BM25
TF-IDF(Term Frequency-Inverse Document Frequency,詞頻-逆文檔頻率)的直覺是:一個詞在當前文檔出現的越多,在整個語料庫中越少見,它對檢索越重要。
假設100篇文章有60篇包含"模型",只有3篇包含"蒸餾",那麼"蒸餾"更能區分那些文章真正與"模型蒸餾"相關。
其中,TF(t,d)是詞t在文件d中出現的次數,DF(t)是包含該詞的文件數,N是文件總數。以上述最樸素的現實為例,原始詞頻隨出現次數線性增長,而且沒有校正文件長度:同一個詞出現10次會得到出現5次的兩倍詞頻,長文件也容易僅因為字數更多而獲得高分。
BM-25可以看做對這兩個侷限的經典修正:它保留IDF對稀有詞的加權,同時引述詞頻飽和與長度規一化:
其中,qi是查尋中的詞,|D|是文件長度,avgdl是語料庫的平均文件長度。IDF(BM25)瞎了下標,是因為它和上面TF-IDF的IDF並不是同一個公式 -- BM25換了更穩健的寫法:
直覺不變,仍是"詞越稀有,權重越高",變的只是度量方式:分子從"文件總數N"換成"不含該詞的文件數N-DF(t)",於是這個比值直接反應"不含該詞的文件是含它的文件的幾倍"; 分子分母又各加0.5作平滑,使DF(t)取到0或N這兩個極端時公式仍有定義。代價是當一個詞出現在超過半數文件中時(DF(t)>N/2)取值會變成負數,因此實現中通常會設一個下限。
GitHub: https://github.com/magnitudedev/magnitude
Magnitude 是一個開源的本地推理伺服器與多端工具集,會為你的硬體選擇並載入最適合的本地模型,並將這些模型「插到」你已在用的 agent(CLI / desktop / web / harness)上。主要面向希望離線、私有且在本機執行大型模型的開發者與整合者。